class Solution{
public:
  string decodeString(string s){

    // 表示括号嵌套层数
    int level = 0;
    // 操作数栈
    stack<int> numberStack;
    // 压入一个0，这样不用区分是否是栈空的情况
    numberStack.emplace(1);
    // 子串栈
    stack<string> strStack;
    // 压入一个空串，这样不用区分是否是栈空的情况
    strStack.emplace("");
    string ans;
    int multi = 0;

    for(char c : s){
      if(isdigit(c)){
        multi = multi * 10 + c - '0';
      }else if(isalpha(c)){
        ans.push_back(c);
      }else if(c == '['){
        strStack.emplace(ans);
        ans.clear();
        numberStack.emplace(multi);
        multi = 0;
      }else{
        int n = numberStack.top() - 1;
        numberStack.pop();
        string temp = ans;
        while(n > 0){
          ans.append(temp);
          --n;
        }
        ans = strStack.top().append(ans);
        strStack.pop();
      }
    }

    return ans;

  }
};